信頼できる認証によるビューの表示 #Tableau
Tableau Server には、信頼できる認証という機能があります。こちらの機能について、過去にも同様の内容がありますが、個人的にも理解を深めておきたく記事としました。
Tableau ServerのビューをWebページに埋め込む『信頼できる認証』 | DevelopersIO
信頼できる認証
通常、Tabeau Server 上のビューを閲覧する際は認証が必要です。Web アプリケーション内にビューを埋め込む際、Web アプリケーション側にユーザーを認証する手段が既にあると、サインインを2度行う必要があります。
この際、事前に信頼関係を構築したサーバーに発行される「チケット」を使用することで、認証無しで Tabeau Server のビューにアクセスすることが可能となる機能です。(サインインを2度行わずに済むようにできる。)
信頼できる認証の仕組みは以下の通りです。
こちらの図は 信頼できる認証のしくみ | Tableau ヘルプ より引用。
- ユーザーがビューが埋め込まれた Web ページにアクセスします
- Web サーバーから Tableau Server に ビューを閲覧する Tableau Server のユーザー情報を含む POST 要求を送ります
※この Web サーバーは、事前に Tableau Server と信頼関係を構築しています - Tabeau Server は、Web サーバーの IP アドレスまたはホスト名を確認し、信頼できるサーバーとしてリストされている場合、「チケット」を応答として返します
- Web サーバーでチケット付きのビュー表示用 URL を構築します
- クライアントの Web ブラウザーは、チケット付きの URL が含まれている GET 要求を Tableau Server に送信します
- Tabeau Server がチケットを受け取り、セッションを作成・ユーザーをログインさせ、埋め込みビューの最終的な URL をクライアントに送信します
検証環境
以下の環境で行いました。
- Tableau Server on Windows 2023.1.5
- Trust Server
- 信頼関係を設定するサーバーとします
本来の使い方としては、上記の仕組み4にあるように、Web サーバー側でチケットを含む URL を作成し、クライアントブラウザに返すようにします。
ここでは、Trust Server からチケットの取得までを行い、チケットを含む URL は手動で作成し、クライアントから表示できるかを確認することとします。
信頼関係の設定
はじめに Web サーバーからの要求を認識して信頼するように Tableau Server を構成します。
こちらは TSM の Web インターフェース・ TSM CLI のいずれでも行えます。コマンドの場合、以下を使用します。
tsm authentication trusted configure -th "XX.XX.XX.XX"
ここでは、Tableau Server と同一のネットワークに Web サーバー用の EC2 (上図の Trust Server)を構築しているので、プライベートIPアドレスを指定しました。複数のIPアドレスやホスト名を指定する場合、以下のようになります。
tsm authentication trusted configure -th "192.168.1.101", "192.168.1.102", "webserv1", "webserv2"
※各ホスト名または IP アドレスは二重引用符で囲み、後ろにコンマと各コンマの後にスペースを置く必要があります。また、ホスト名を使用する場合でも、指定する Web サーバーには静的 IP アドレスを使用する必要があります。
実行後、TSM の設定を確認すると下図のように信頼されたホストとして追加されます。
設定の反映には Tabeau Server の再起動が必要なので、以下のコマンドで設定反映・再起動を行います。
tsm pending-changes apply
注意点として、Trust Server と Tableau Server の間に 1 台以上のプロキシ サーバーが存在する場合、tsm configuration set gateway.trusted
オプションを使用してプロキシ サーバーを信頼できるゲートウェイとして追加する必要があります。(詳細は、Tableau Server プロキシの設定をご参照ください。)
Tableau Server への信頼できる IP アドレスまたはホスト名の追加 | Tableau ヘルプ
Tableau Server からのチケットの取得
信頼関係を設定後、Trust Server から http://<server_name>/trusted
宛に POST 要求を送信することでチケットを取得できます。以下のような形式です。
curl -X POST -d "username=admin" http://<Tableau Server>/trusted
POST 要求に使用するデータは以下の通りです。
username=<username>
- 必須
- Tableau Server の上のユーザー名
target_site=<site id>
- ビューが 既定 サイト以外のサイトにある場合は、ビューがあるサイトのサイトIDを指定
- 大文字と小文字が区別される
client_ip=<IP address>
- オプション
- ビューにアクセスする Web ブラウザーがあるコンピューターの IP アドレスの指定に使用 (
client_ip=123.45.67.891
など) - このパラメーターを使用する際は、クライアント IP 照合の設定 に記載がある設定が必要
既定以外のサイト(ここではtest
)を指定する場合は、以下のようになります。
curl -X POST -d "username=admin" -d "target_site=test" http://<Tableau Server>/trusted
正しく信頼関係を設定できていると、以下のような文字列(チケット)が返されます。
AnMUPtGFTCWP5I_bA1RQLw==:xs-Shaa2zm8sa5QyfT6yIxYx
注意点として、Tabeau Server を SSL化している場合、https を使用する必要があります。
信頼関係を設定できていないなど、Tableau Server で要求を処理できない場合は、-1
が返されます。
Tableau Server からのチケットの取得 | Tableau ヘルプ
チケット付きビューの表示
チケットを取得したら、チケットを含む URL を構築し、クライアントの Web ブラウザに返します。あるビューを表示する場合、以下のような形式で作成します。
http://<server_name>/trusted/<unique_ticket>/views/<workbook_name>/<view_name>
以下は Tableau Server のサンプルダッシュボードとして、既定のサイトに作成される 「Regional」というワークブックにある「Obesity」ビューを表示する例です。
http://<Tableau Server>/trusted/M0C7JG0ORjCRftmK67Plaw==:S7ada0ZN701zof234qZzrI0x/views/Regional/Obesity
手元のクライアントブラウザから上記のチケット付きの URL にアクセスすると、認証無しで以下のようにビューが表示されました。(※事前にログアウト済みです)
異なるサイトにあるビューを表示する場合は、/views
の前に t/<site_id>
という文字列を追加します。(以下は「test」というサイトの「iris」ワークブックにある「Sheet1」というビューを表示する例です。)
http://<Tableau Server>/trusted/AnMUPtGFTCWP5I_bA1RQLw==:xs-Shaa2zm8sa5QyfT6yIxYx/t/test/views/iris/Sheet1
上記はビューを表示していますが、埋め込まれたビューを指定することも可能です。
チケットは発行後 3 分以内に引き換える(チケットを含む URL で Tabeau Server にアクセスする必要がある)あり、有効期限が切れるとビューを表示できません。また、チケットは一度引き換えられると無効になるので、別のブラウザなどから再度同じチケット付きの URL を介したビューの参照はできません。
信頼できる認証のトラブルシューティング
ここでは、同一のネットワーク内の通信ですので特に問題ありませんが、上述の通り両サーバー間にプロキシ サーバーやロードバランサーがある場合、事前に追加の設定が必要です。
その他、トラブルシューティングの詳細は以下にまとめられています。
信頼できる認証のトラブルシューティング | Tableau ヘルプ
さいごに
信頼できる認証という機能を試してみました。こちらの内容が何かの参考になりましたら幸いです。